package com.net.oil.widget;

import android.content.Context;
import android.os.Handler;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.net.oil.R;

public class ToastUtil {
    private static Toast mToast;
    private static Handler mHandler = new Handler();
    private static Runnable r = new Runnable() {
        public void run() {
            mToast.cancel();
            mToast = null;//toast隐藏后，将其置为null
        }
    };


    /**
     * 显示错误toast
     * @param context   上下文
     * @param message   提示信息
     */
    public static void showErrorToast(Context context, String message) {
        showShortToast(context, message, 1, 0, 0, 0, 0);
    }

    /**
     * 显示成功toast
     * @param context   上下文
     * @param message   提示信息
     */
    public static void showSuccessToast(Context context, String message) {
        showShortToast(context, message, 2, 0, 0, 0, 0);
    }

    /**
     * 显示禁止toast
     * @param context   上下文
     * @param message   提示信息
     */
    public static void showForbidToast(Context context, String message) {
        showShortToast(context, message, 3, 0, 0, 0, 0);
    }

    /**
     * @param context 上下文
     * @param message 要显示的信息
     */
    public static void showShortToast(Context context, String message) {
        showShortToast(context, message, 0, 0, 0, 0, 0);
    }


    /**
     * @param context   上下文
     * @param message   要显示的信息
     * @param iconIndex 1代表错误图片；2代表成功图片；3代表囧图片;默认成功图片
     */
    public static void showShortToast(Context context, String message, int iconIndex) {
        showShortToast(context, message, iconIndex, 0, 0, 0, 0);
    }

    /**
     * @param context   上下文
     * @param message   要显示的信息
     * @param iconIndex 1代表错误图片；2代表成功图片；3代表囧图片;默认成功图片
     * @param textColor 要显示的文字的颜色
     */
    public static void showShortToast(Context context, String message, int iconIndex, int time, int textColor) {
        showShortToast(context, message, iconIndex, time, textColor, 0, 0);
    }

    /**
     * @param context        上下文
     * @param message        要显示的信息
     * @param iconIndex      1代表错误图片；2代表成功图片；3代表囧图片;默认成功图片
     * @param textColor      要显示的文字的颜色
     * @param gravityXoffset X方向显示位置
     * @param gravityYoffset Y方向显示的位置
     */
    private static void showShortToast(Context context, String message, int iconIndex, int time, int textColor, int gravityXoffset, int gravityYoffset) {
        try {
            View view = LayoutInflater.from(context).inflate(R.layout.custom_toast, null);
            TextView text = view.findViewById(R.id.toast_message);//显示的提示文字
            ImageView icon = view.findViewById(R.id.icon);
            /*设置显示的图片*/
            int okIcon = R.drawable.toast_icon_success;
            if (iconIndex == 1) {
                int errorIcon = R.drawable.toast_icon_error;
                icon.setImageResource(errorIcon);
            } else if (iconIndex == 2) {
                icon.setImageResource(okIcon);
            } else if (iconIndex == 3) {
                int confusionIcon = R.drawable.toast_icon_forbid;
                icon.setImageResource(confusionIcon);
            } else {
                icon.setImageResource(okIcon);
            }
            /*设置文字颜色*/
            text.setText(message);
            if (textColor != 0) {
                text.setTextColor(textColor);
            }
            mHandler.removeCallbacks(r);
            if (mToast == null) {//只有mToast==null时才重新创建，否则只需更改提示文字
                mToast = new Toast(context);
                mToast.setDuration(Toast.LENGTH_LONG);
                //设置显示位置
                if (gravityXoffset != 0 || gravityYoffset != 0) {
                    mToast.setGravity(Gravity.CENTER, gravityXoffset, gravityYoffset);
                } else {
                    mToast.setGravity(Gravity.CENTER, 0, 0);
                }
                mToast.setView(view);
            }
            if (time > 1000 && time <= 3000) {
                mHandler.postDelayed(r, time);//延迟1秒隐藏toast
            } else {
                mHandler.postDelayed(r, 2000);//延迟1秒隐藏toast
            }
            mToast.show();
        }catch (Exception e){
            e.printStackTrace();
        }

    }

}
